package math;

/**
 * 给你一个整数 num，请你找出同时满足下面全部要求的两个整数：
 * 两数乘积等于  num + 1 或 num + 2
 * 以绝对差进行度量，两数大小最接近
 * 你可以按任意顺序返回这两个整数。
 * <p>
 * 示例 1：
 * 输入：num = 8
 * 输出：[3,3]
 * 解释：对于 num + 1 = 9，最接近的两个因数是 3 & 3；对于 num + 2 = 10, 最接近的两个因数是 2 & 5，因此返回 3 & 3 。
 * <p>
 * 示例 2：
 * 输入：num = 123
 * 输出：[5,25]
 * <p>
 * 示例 3：
 * 输入：num = 999
 * 输出：[40,25]
 *
 * @author Jisheng Huang
 * @version 20250501
 */
public class ClosestDivisors_1362 {
    /**
     * Helper method to calculate the divisors
     *
     * @param x the given integer number
     * @return the closest divisors pair
     */
    public static int[] get(int x) {
        int[] res = {0, 0};

        for (int i = 1; i * i <= x; ++i) {
            if (x % i == 0) {
                res[0] = i;
                res[1] = x / i;
            }
        }

        return res;
    }

    /**
     * Calculate the divisors for num + 1 and num + 2. Take the smallest pair
     *
     * @param num the given number
     * @return the closest pair
     */
    public static int[] closestDivisors(int num) {
        int[] res1 = get(num + 1);
        int[] res2 = get(num + 2);

        return res1[1] - res1[0] < res2[1] - res2[0] ? res1 : res2;
    }

    public static void main(String[] args) {
        int[] ans = closestDivisors(8);
        System.out.println(ans[0] + " : " + ans[1]);

        ans = closestDivisors(123);
        System.out.println(ans[0] + " : " + ans[1]);

        ans = closestDivisors(999);
        System.out.println(ans[0] + " : " + ans[1]);
    }
}
